package xyz.penghaonan.wificonnect.message;

import com.penghaonan.appframework.utils.Logger;

import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;

import xyz.penghaonan.wificonnect.WifiConnectSDK;
import xyz.penghaonan.wificonnect.sockethelper.BaseSocketHelper;

public class MsgSender {

    private static final Map<Long, IResponseListener> listenerMap = new HashMap<>();

    public static boolean sendMsg(IMsg msg) {
        return sendMsg(msg, null);
    }

    public static boolean sendMsg(IMsg msg, IResponseListener listener) {
        Logger.i("message > send:" + msg.getClass().getSimpleName() + "(" + msg.getSessionId() + ")");
        String data = MsgFactory.createMsgText(msg);
        if (data != null) {
            if (msg instanceof BaseRequestMsg) {
                listenerMap.put(((BaseRequestMsg) msg).getId(), listener);
            }
            BaseSocketHelper socketHelper = getSocket();
            if (socketHelper != null) {
                return getSocket().send(data);
            } else {
                return false;
            }
        }
        return false;
    }

    public static void onResponse(BaseResponseMsg msg) {
        IResponseListener listener = listenerMap.get(msg.getRequestId());
        listenerMap.remove(msg.getRequestId());
        if (listener != null) {
            listener.onResponse(msg);
        }
    }

    public interface OnResponseListener {
        void onResponse();
    }

    private static BaseSocketHelper getSocket() {
        return WifiConnectSDK.getConfig().getConnectHelper().getSocketHelper();
    }
}
